/* Copyright (c) 2004-2024 peigen.info. All rights reserved. */

package info.peigen.hotpot.common.service.base.processor;

import jakarta.validation.constraints.NotNull;

/**
 * <b>(Processor)</b>
 *
 * @author Peigen
 * @version 1.0.0
 * @since 2022/5/26
 */
@SuppressWarnings({"unused", "rawtypes"})
public interface Processor extends Comparable<Processor> {

    int TOP_LEVEL    = 1;
    int BOTTOM_LEVEL = 100;

    /**
     * 该处理器的执行级别，数字小的先执行。范围0-100。
     * 大体分为0-10、11-80、81-100三个大范围。
     * 0-10,为预处理Process，命名规范为XXXPreProcess
     * 11-80，为业务执行处理
     * 81-100，为业务后处理，命名规范为XXXPostProcess
     * 如处理器执行级别一样，则随机选择执行顺序。
     *
     * @return Integer
     */
    default Integer level() {
        return 50;
    }

    /**
     * 处理器执行
     *
     * @param serviceContext 上下文，包罗万象
     */
    void execute(ProcessorServiceContext serviceContext);

    /**
     * 比较处理器优先级
     *
     * @param processor the object to be compared.
     *
     * @return int
     */
    @Override
    default int compareTo(@NotNull Processor processor) {
        return this.level().compareTo(processor.level());
    }
}
